package com.alili_tv.system.utils;

import lombok.extern.slf4j.Slf4j;
import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.BaseAnalysis;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 分词器工具包
 */
@Slf4j
public class AnsjUtils {
    // 分词器解析时无视的词性
    private static final Set<String> ignoreNatures = new HashSet<>() {{
        add("ad"); // 副词
        add("c"); // 连词
        add("e"); // 叹词
        add("f"); // 方位词
        add("k"); // 后接词
        add("o"); // 拟声词
        add("p"); // 后接词
        add("Rg"); // 代语素
        add("r"); // 代词
        add("u"); // 助词
        add("w"); // 标点符号
        add("Yg");// 语气语素
        add("y"); // 语气词
        add("null"); // null
    }};

    public static List<String> analyseKeyword(String text) {
        List<String> keywords = new ArrayList<>();
        Result result = BaseAnalysis.parse(text);
        for (Term term : result) {
            String natureStr = term.getNatureStr();
            if (natureStr != null && !ignoreNatures.contains(natureStr)) {
                keywords.add(term.getName());
            }
        }
        log.error("分词结果：{} -> {}", text, keywords);
        return keywords;
    }
}
